


function getNum(num) {
    return new Promise((resolve,reject) => {
        setTimeout(() => {
            resolve(num + 1)
        },1000)
    })
}

function asyncFun(callback) {
    const gen = callback()
    function next(data) {
        //? 这是Generator的next方法 取到value(是个Promise)和done
        const ye = gen.next(data)
        if (ye.done) return ye.value
        //? 执行Promise的then方法 拿到resolve里的数据 递归进行本函数 这就实现了await的作用 拿到上一步的结果 再进行操作
        ye.value.then((data)=>{
            next(data);
        });
    }
    next()
}

const func = function *() {

    const f1 = yield getNum(1)
    console.log(f1)
    const f2 = yield getNum(f1)
    console.log(f2)
    const f3 = yield getNum(f2)

    console.log(f3)
}

asyncFun(func)
